组建 Raid 的硬盘
以下内容的前提为,使用机械硬盘组建 Raid 阵列。
要使用同型号的硬盘。 (有条件的话,使用同型号、不同批次的硬盘)
有一种观点是,应当使用不同品牌、相同容量的硬盘来创建阵列: 如果组成 Raid 的硬盘均为同一型号,那么它们有相同故障点的概率极高。如果这 2 块硬盘还来自同一批次,那么它们不但有相同的故障点,这 2 块盘的寿命也非常接近。混用不同型号的硬盘,可以让整个 raid 阵列的可靠性更好。
这种观点有一定的道理,但它不适用于硬件 Raid 阵列的情况。混用不同品牌/型号的硬盘可能无法组建阵列,甚至可能导致 Raid 阵列损毁。
比如,阵列卡不允许将使用 512B 扇区的硬盘和使用 4KB 扇区的硬盘混合起来组建阵列。
又比如,不同品牌/型号的硬盘通常有不同的用于控制硬盘的固件,这就意味着,不同品牌/型号的硬盘可能在读写数据方面有着不同的行为。一个具体的例子是,混用希捷银河和西数 HC550 组建的硬件阵列,某些阵列卡在读写数据时会报 header 错误,会丢数据。
而软件 Raid,比如 mdadm, btrfs, zfs 虽然有的功能不够用、有的不太稳定,但对于硬件需求要宽容许多。
使用软件 Raid 的话,最好使用硬盘分区作为 raid array 的组成部分,而不应直接使用整个硬盘。
不同制造商生产的硬盘 (甚至同一制造商生产的,标称容量相同的,不同型号的硬盘) 不一定具有完全相同的硬盘大小。这就意味着,在由多个整硬盘 (而不是用分区) 组建的 raid array 中,某个设备出现损坏时,用来替换已损坏硬盘的新盘必须和坏盘拥有相同的容量。当容量不同时,新盘无法替换旧盘。
所以使用硬盘分区作为软件 raid 阵列的组成部分可以避免因硬盘容量差异而导致的问题。
分区策略为: 每个硬盘上的分区大小 = 容量最小的硬盘上的分区的大小* ,并且 *用于 raid 的分区的大小 < 多个硬盘设备中容量最小的硬盘设备的大小 。
例如,两个标称容量为 3TB 硬盘组 RAID1:
sudo parted -l
命令显示容量最小的硬盘的容量为 3002G。- 分区容量必须小于 3002G,这里取 3001G,其余空间被浪费。
- 同样地,另一个硬盘上的分区大小必须和前一个硬盘上的分区大小相同,也取 3001G,剩下的空间被浪费。
然后,使用每个硬盘上的分区来组成阵列。
浪费掉的空间保证了: 即使新盘容量比坏盘容量小,但只要容量差距小于被浪费掉的空间,那么就能在新盘上创建和坏盘容量相同的分区,并把这个分区加入 raid。